終於攻克 High-Performance Concurrency 這個大章節了!雖然這星期過得格外忙碌,但在持續寫作的過程中逐漸體會到學習的樂趣,進度也不再只...
Thread pinning 並不只是「把 thread 綁到某顆 CPU」這麼簡單,其核心概念可以濃縮成三句話: CPU affinity 限制 threa...
前兩篇文篇討論了 thread pinning 的基本原理:透過 CPU affinity 限制 Thread 的執行範圍,降低 CPU migration 與...
在一般應用程式中,thread 要在哪一顆 CPU 上執行,不會是開發者需要操心的問題。作業系統的 scheduler 會根據 CPU 負載、Thread pr...
Lock-free 並非完全不使用 lock 的技巧,而是在高競爭情況下避免傳統 mutex 帶來的阻塞成本。昨天已提到 Lock-free programmi...
在 Low-Latency C++ 的設計中,最大的困難並非只有程式速度的提升,而是在高併發及高負載下仍然維持可預期且穩定的延遲。對金融交易、即時行情、遊戲引擎...
在 False Sharing Prevention 中有提到其與 std::atomic 之間的關係。而在高效能並行程式設計中,真正困難的不只是熟悉 atom...
在現代電腦系統中,CPU 的運算速度不斷提升,multi-core 處理器也已成為主流。為了充分利用硬體資源,軟體通常會採用 concurrency 或 par...
從 Machine Code 單元 開始,我們看到 compiler 如何把 C++ 轉成 CPU 真正執行的 instruction;透過 Data-Orie...
雖然心裡早就有所準備,但跟硬體有關的內容實在是難度太高,學到後來也逐漸感受到精疲力竭。幸好依舊努力不曾放棄,希望這場冒險終將有所回報。 終於完成兩大 Low-L...
在 low-latency C++ 中,效能瓶頸往往不在於程式做了多少計算,而在於 CPU 為了取得資料究竟付出了多少成本。當多個 thread 同時存取資料時...
在真正追求 nanosecond-level latency 的 C++ 系統中,資料如何排列與存取就是效能的一大考量。上篇文章已經提到 Array of St...
在 Low-Latency C++ 系統中,效能瓶頸往往不在 CPU arithmetic,而是在 memory access。當 CPU 執行速度遠快於主記憶...
同樣一段 C++ code,即使 algorithmic complexity 完全相同,產生的 machine code 也可能因為 branch patte...
在一般的 C++ 開發中,我們往往習慣從 source code 的角度思考問題: 這個 class 的 interface 是否設計得好? 這個 abstr...
上一篇文的低延遲系統的大哉問中,提到了幾個在 compile time 常見且實用的語法。接下來我們將進一步拆解這些語法的運作方式,了解它們各自適合的使用情境,...
終於講完第一個小章節了!雖然有不少內容和《Effective C++》相關,但在重新複習的過程中依舊學到了新的知識點,也算是重新認識了一些以前忽略的細節。所以今...
上一篇我們以 STL 為基點,探討 memory layout、cache locality、allocation 及 tail latency,並拆解 Low...
在學習 C++ STL 時不能只知道 container 如何使用,更要理解 abstraction 背後的 runtime cost。例如 vector、li...
去年曾經讀過《Effective C++》,當時對 Resource Acquisition Is Initialization (RAII) 的理解較為片面,...
拖延了一個月,終於把這次的參賽主題拍板定案! 明明本人是個連 C++ 都還不夠熟練的大菜鳥,卻總是喜歡挑戰一些看起來生澀難懂的主題,把自己搞得緊張兮兮還不敢斷更...